661588b8565223497eaf005260420ea7c1728fa5,src/main/java/rx/schedulers/JavaFxScheduler.java,InnerPlatformScheduler,schedule,#Action0#number#TimeUnit#,72

Before Change



        @Override
        public Subscription schedule(final Action0 action, long delayTime, TimeUnit unit) {
            long delay = Math.max(0, unit.toMillis(delayTime));
            assertThatTheDelayIsValidForTheSwingTimer(delay);

            class DualAction implements ActionListener, Subscription, Runnable {
                private Timer timer;
                final SerialSubscription subs = new SerialSubscription();
                boolean nonDelayed;

                private void setTimer(Timer timer) {
                    this.timer = timer;
                }

                @Override
                public void actionPerformed(ActionEvent e) {
                    run();
                }

                @Override
                public void run() {
                    if (nonDelayed) {
                        try {
                            if (tracking.isUnsubscribed() || isUnsubscribed()) {
                                return;
                            }
                            action.call();
                        } finally {
                            subs.unsubscribe();
                        }
                    } else {
                        timer.stop();
                        timer = null;
                        nonDelayed = true;
                        trampoline(this);
                    }
                }

                @Override
                public boolean isUnsubscribed() {
                    return subs.isUnsubscribed();
                }

                @Override
                public void unsubscribe() {
                    subs.unsubscribe();
                }

                public void set(Subscription s) {
                    subs.set(s);
                }
            }


            final DualAction executeOnce = new DualAction();
            tracking.add(executeOnce);

            final Timer timer = new Timer((int) delay, executeOnce);
            executeOnce.setTimer(timer);
            timer.start();

After Change



        @Override
        public Subscription schedule(final Action0 action, long delayTime, TimeUnit unit) {
            long delay = unit.toMillis(delayTime);
            assertThatTheDelayIsValidForTheJavaFxTimer(delay);

            class DualAction implements EventHandler<ActionEvent>, Subscription, Runnable {

                private Timeline timeline;

                final SerialSubscription subs = new SerialSubscription();
                boolean nonDelayed;

                private void setTimer(Timeline timeline) {
                    this.timeline = timeline;
                }

                @Override
                public void handle(ActionEvent event) {
                    run();
                }

                @Override
                public void run() {
                    if (nonDelayed) {
                        try {
                            if (tracking.isUnsubscribed() || isUnsubscribed()) {
                                return;
                            }
                            action.call();
                        } finally {
                            subs.unsubscribe();
                        }
                    } else {
                        timeline.stop();
                        timeline = null;
                        nonDelayed = true;
                        trampoline(this);
                    }
                }

                @Override
                public boolean isUnsubscribed() {
                    return subs.isUnsubscribed();
                }

                @Override
                public void unsubscribe() {
                    subs.unsubscribe();
                }
                public void set(Subscription s) {
                    subs.set(s);
                }
            }

            final DualAction executeOnce = new DualAction();
            tracking.add(executeOnce);

            //final Timeline timer = new Timeline((int) delay, executeOnce);
            final Timeline timer = new Timeline(new KeyFrame(Duration.millis(delay)));

            executeOnce.setTimer(timer);
            timer.play();